//package com.ksd.api.task;
//
//import com.ksd.common.config.PlayControlConfig;
//import com.ksd.common.core.domain.AjaxResult;
//import com.ksd.common.tool.FileTools;
//import com.ksd.common.utils.StringUtils;
//import com.ksd.common.utils.file.FileUploadUtils;
//import com.ksd.quartz.util.TaskConstans;
//import com.ksd.system.domain.*;
//import com.ksd.system.service.*;
//import com.ksd.web.controller.service.MovieFileService;
//import com.ksd.web.controller.service.SongFileService;
//import org.slf4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.annotation.EnableScheduling;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import java.io.File;
//import java.util.*;
//
///**
// * 每隔8小时更新一遍云服务端导入的电影或音乐内容
// */
//@Component
//@EnableScheduling
//public class SynchDataSqlTask2 {
//
//    private static final Logger logger = org.slf4j.LoggerFactory.getLogger(SynchDataSqlTask2.class);
//
//    @Autowired
//    private ISysBoardService sysBoardService;
//    @Autowired
//    private ISysSynchDataService sysSynchDataService;
//    @Autowired
//    private ISysBatchService sysBatchService;
//
//    @Autowired
//    private SongFileService songFileService;
//    @Autowired
//    private MovieFileService movieFileService;
//    @Autowired
//    private ISysOperLogService sysOperLogService;
//    @Autowired
//    private ISysContentDataService sysContentDataService;
//    @Autowired
//    private ISysSongDataService sysSongDataService;
//
//    private static final String LOCAL_DIR = "local_movies";
//    private Map<String, Integer> uploadProgressMap = new HashMap<>();
//    private Map<String, Integer> uploadProgressTotalMap = new HashMap<>();
//
//    //    @Scheduled(cron = "0 0 */8 * * ?")
//    @Scheduled(cron = "0 0/2 * * * ?")
//    public void getContentData()
//    {
//        System.out.println("开始检测是否有需要同步入库的压缩包数据");
//
//        //先通过接口将压缩包数据下载到本地服务上-->进入数据导入表记录中
//        //解压
//        //读取配置文件,分辨是电影内容还是音乐内容
//        //入库--->批次记录
//
//        SysSynchData sysSynchData = new SysSynchData();
//        sysSynchData.setStatus("0");
//        List<SysSynchData> synchDataList = sysSynchDataService.selectSysSynchDataList(sysSynchData);
//        System.out.println("解压同步的内容数据个数:"+synchDataList.size());
//        if (synchDataList != null && synchDataList.size() > 0) {
//            sysSynchData = synchDataList.get(0);
////            String downPath = sysSynchData.getUrl();
////            System.out.println("压缩包上传到服务器的路径filePath:"+downPath);
//
////            String synchDataPath = File.separator+"playcontroller_synch_data"+File.separator+ DateUtils.dateTimeNow();
////            String synchFilePath = PlayControlConfig.getZipFilePath()+  synchDataPath; //服务器文件实际存储地址
////            String mapperFilePath = PlayControlConfig.getMappedAddress()+  synchDataPath; //服务器文件映射地址
////            try {
////                System.out.println("进行解压缩操作");
////                UnzipUtility.unzip(downPath,synchFilePath);
////            } catch (IOException e) {
////                throw new RuntimeException(e);
////            }
////            sysSynchData.setStatus("1");
////            sysSynchData.setUnzipPath(mapperFilePath);
////            sysSynchDataService.updateSysSynchData(sysSynchData);
//            System.out.println("解析上传目录的文件的所有文件,进行数据录入,可能存在电影,音乐");
//
//            String mapperFilePath = sysSynchData.getUnzipPath();
//            System.out.println("检测待同步的内容数据文件夹目录mapperFilePath:"+mapperFilePath);
//            sysSynchData.setStatus("1");//正在导入
//            sysSynchDataService.updateSysSynchData(sysSynchData);
//
//            sysSynchData = sysSynchDataService.selectSysSynchDataById(sysSynchData.getId());
//            //读取mapperFilePath目录下的文件或者文件夹,找出对应的电影或者音乐,入库
//            //电影
//            String taskId = "";
//            SysBatch result = new SysBatch();
//            do {
//                taskId = UUID.randomUUID().toString();
//                result = sysBatchService.selectSysBatchByTaskId(taskId);
//            }while (StringUtils.isNotNull(result));
//            uploadProgressMap.put(taskId, 0);
//            uploadProgressTotalMap.put(taskId, 0);
//
////            importSynchData(sysSynchData.getType(),mapperFilePath,sysSynchData,taskId);
//            importSynchData(mapperFilePath,sysSynchData,taskId);
//
//
//        }
//        System.out.println("将内容压缩包数据入库结束");
//
//    }
//
//    public void importSynchData(String fileType,String synchUnzipDataPath,SysSynchData synchData,String taskId){
//
//        SysBatch sysBatch = new SysBatch();
//        sysBatch.setUserName("admin");
//        sysBatch.setStartTime(new Date());
//        sysBatch.setTaskId(taskId);
//        sysBatch.setType(fileType);
//        sysBatchService.insertSysBatch(sysBatch);
//
//        List<String> unzipFilePaths = new ArrayList<String>();
//        unzipFilePaths.add(synchUnzipDataPath);
//        List<String> filePaths = FileTools.filterFilePathsDir(unzipFilePaths);
//
//        //filePaths是具体的文件路径
//        //包含文件和文件夹目录
//        int totalFileSizes = 0;
//        // 统计所有文件数量,该路径已经被算过,只存在具体的文件,没有文件夹
//        for (String filePath : filePaths) {
//            File directory = new File(filePath);
//            if (directory.isDirectory()){
//                totalFileSizes = FileTools.findFilesInSubdirectories(directory,totalFileSizes,fileType);
//            }else{
//                if (fileType.equals(SysTvType.movieDefaultId)){
//                    if (FileUploadUtils.isAllowedExtension(directory.getName(),TaskConstans.MOVIE_XML_NAME)){
//                        //将文件夹下的所有文件都复制上传
//                        totalFileSizes++;
//                    }
//                }else if(fileType.equals(SysTvType.songDefaultId)){
//                    if (FileUploadUtils.isAllowedExtension(directory.getName(),TaskConstans.SONG_XML_NAME)){
//                        //将文件夹下的所有文件都复制上传
//                        totalFileSizes++;
//                    }
//                }
//
//            }
//        }
//        System.out.println("totalFileSizes: "+totalFileSizes);
//        if (totalFileSizes == 0) {
//            logger.error("待同步的文件的数据格式不正常,请校验待同步的数据");
//            synchData.setStatus("-1");
//            synchData.setRemark("待同步的文件的数据格式不正常,请校验待同步的数据");
//            sysSynchDataService.updateSysSynchData(synchData);
//            sysBatch.setStatus("1");
//            sysBatch.setRemake("待同步的文件的数据格式不正常,请校验待同步的数据");
//            sysBatch.setEndTime(new Date());
//            sysBatchService.updateSysBatch(sysBatch);
//            sysOperLogService.insertOperlogApiError("同步数据失败,待同步的文件的数据格式不正常,请校验待同步的数据,同步目录:"+synchUnzipDataPath);
//            return;
//        }
//        uploadProgressTotalMap.put(taskId, totalFileSizes);
//        // 上传文件个数记录
//        int uploadedFilesCount = 0;
//        for (String filePath : filePaths) {
//            File directory = new File(filePath);
//            if (directory.isDirectory()) {
//                System.out.println("开始解析文件夹上传");
//                //文件夹路径uploadPath
//                uploadedFilesCount = uploadFilesAndFolders(filePath,uploadedFilesCount,taskId,"admin",totalFileSizes,fileType,synchData);
//                System.out.println("文件夹上传个数uploadedFilesCount : "+uploadedFilesCount);
//                int progress = (int) ((uploadedFilesCount / (double) totalFileSizes) * 100);
//                System.out.println("计算进度 progress:"+progress);
//                uploadProgressMap.put(taskId, progress);
//            } else {
//                System.out.println("开始单文件进行上传,解析");
//                //当遍历循环,发现该文件是一个xml文件时,读取该config.xml文件下的同级文件,
//                //将文件上传,并将文件地址存入数据库中
//                String destDirectory = PlayControlConfig.getNginxRootPath();
//                String configFileName = directory.getName();
//                if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.XML_NAME)){
//                    File parentFile = directory.getParentFile();
//                    System.out.println("uploadFiles:"+parentFile.getAbsolutePath());
//                    AjaxResult ajaxResult = new AjaxResult();
//                    if (SysTvType.movieDefaultId.equals(fileType)){
//                        ajaxResult = movieFileService.setMovieUpdateFile(parentFile.getAbsolutePath(), "admin", taskId);
//                    }else if(SysTvType.songDefaultId.equals(fileType)){
//                        ajaxResult = songFileService.setSongUpdateFile(parentFile.getAbsolutePath(), "admin", taskId);
//                    }
//                    if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                        synchData.setStatus("1");//同步失败
//                        synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        sysSynchDataService.updateSysSynchData(synchData);
//                        sysBatch.setStatus("1");
//                        sysBatch.setRemake(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                        sysBatch.setEndTime(new Date());
//                        sysBatchService.updateSysBatch(sysBatch);
//                    }
//                }
//                uploadedFilesCount++;
//                System.out.println("文件上传个数uploadedFilesCount : "+uploadedFilesCount);
//                int progress = (int) ((uploadedFilesCount / (double) totalFileSizes) * 100);
//                System.out.println("计算进度 progress:"+progress);
//                uploadProgressMap.put(taskId, progress);
//            }
//        }
//
//        //电影数据同步完成
//        Integer progress = uploadProgressMap.getOrDefault(taskId, 0);
//        System.out.println("内容入库进度:"+progress);
//        if (progress == 100) {
//            SysBatch sysBatchTemp = sysBatchService.selectSysBatchByTaskId(taskId);
//            sysBatchTemp.setEndTime(new Date());
//            String type = sysBatchTemp.getType();
//            if (type.equals(SysTvType.movieDefaultId)){
//                SysContentData sysContentData = new SysContentData();
//                sysContentData.setTaskId(taskId);
//                List<SysContentData> sysContentDatas = sysContentDataService.selectSysContentDataList(sysContentData);
//                if (sysContentDatas.size() != 0) {
//                    sysBatchTemp.setStatus("0");
//                    sysBatchTemp.setNumber(String.valueOf(sysContentDatas.size()));
//                    sysBatchTemp.setContentEnd(sysContentDatas.get(0).getId().toString());
//                    sysBatchTemp.setContentStart(sysContentDatas.get(sysContentDatas.size() - 1).getId().toString());
//                    sysBatchTemp.setRemake("下载同步云服务器上的电影");
//                }
//            }else if(type.equals(SysTvType.songDefaultId)){
//                SysSongData sysSongData = new SysSongData();
//                sysSongData.setTaskId(taskId);
//                List<SysSongData> sysSongData1 = sysSongDataService.selectSysSongDataList(sysSongData);
//                if (sysSongData1.size() != 0){
//                    sysBatchTemp.setStatus("0");
//                    sysBatchTemp.setNumber(String.valueOf(sysSongData1.size()));
//                    sysBatchTemp.setContentEnd(sysSongData1.get(0).getId().toString());
//                    sysBatchTemp.setContentStart(sysSongData1.get(sysSongData1.size() - 1).getId().toString());
//                    sysBatchTemp.setRemake("下载同步云服务器上的音乐");
//                }
//            }
//            synchData.setStatus("2");//已同步
//            sysSynchDataService.updateSysSynchData(synchData);
//            sysOperLogService.insertOperlogApiSuccess("同步数据成功,同步目录:"+synchUnzipDataPath);
//            sysBatchService.updateSysBatch(sysBatchTemp);
//
//            //当前数据同步完成之后,向播控云服务端发送请求,说明该运营商下的数据已同步成功
//
//        }
//    }
//
//
//    /**
//     * 上传指定文件夹下的所有文件和文件夹到目标路径
//     * @param sourceDir 源文件夹路径
//     */
//    public int uploadFilesAndFolders(String sourceDir, int count, String taskId,String userName,Integer totalFileSizes,String fileType,SysSynchData synchData) {
//        System.out.println("===========================uploadFilesAndFolders*************************************");
//        File source = new File(sourceDir);
////        File destination = new File(destDir);
//
//        // 检查源文件夹是否存在
//        if (!source.exists()) {
//            System.out.println("源文件夹不存在: " + sourceDir);
//            return count;
//        }
//        // 检查目标文件夹是否存在，不存在则创建
////        if (!destination.exists()) {
////            destination.mkdirs();
////        }
//        // 遍历源文件夹下的所有文件和文件夹
//        File[] files = source.listFiles();
//
//        if (files != null) {
//            for (File file : files) {
//
//                if (file.isDirectory()) {
//                    System.out.println("依旧是文件夹格式");
//                    // 如果是文件夹，递归调用上传方法
////                    String newDestDirTemp = destDir + File.separator + file.getName();
//                    String newSourceDir = file.getAbsolutePath();
////                    count = uploadFilesAndFolders(newSourceDir, newDestDirTemp,count,taskId,userName,totalFileSizes,fileType);
//                    count = uploadFilesAndFolders(newSourceDir,count,taskId,userName,totalFileSizes,fileType,synchData);
//                    System.out.println("文件夹上传个数uploadedFilesCount count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
//                    System.out.println("文件夹计算进度 progress count:"+progress);
////                    uploadProgressMap.put(taskId, progress);
//                } else {
////                    System.out.println("确定是单个文件,开始进行文件复制");
////                    System.out.println("文件进行复制:$$$$$$$$$$$" + file.getAbsolutePath());
//                    String destDirectory = PlayControlConfig.getNginxRootPath();
//                    String configFileName = file.getName();
//                    if (FileUploadUtils.isAllowedExtension(configFileName,TaskConstans.XML_NAME)){
//                        File parentFile = file.getParentFile();
//                        System.out.println("uploadFilesAndFolders:"+parentFile.getAbsolutePath());
////                        File[] files1 = parentFile.listFiles();
////                        for (File everyFile : files1) {
////                            String newDestDirTemp = destDir + File.separator + everyFile.getName();
////                            System.out.println("newDestDirTemp:"+newDestDirTemp);
////                            FileUtils.copyFileToDirectory(file.getAbsolutePath(),newDestDirTemp);
////                        }
//                        System.out.println(fileType+" fileType的值");
////                    File[] uploadFile = parentFile.listFiles();
////                    for (File s : uploadFile) {
//                        AjaxResult ajaxResult = new AjaxResult();
//                        if (SysTvType.movieDefaultId.equals(fileType)){
//                            System.out.println("电影内容的数据处理@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
//                            ajaxResult = movieFileService.setMovieUpdateFile(parentFile.getAbsolutePath(),userName,taskId);
//                        }else if(SysTvType.songDefaultId.equals(fileType)) {
//                            System.out.println("歌曲内容的数据处理&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
//                            ajaxResult = songFileService.setSongUpdateFile(parentFile.getAbsolutePath(), userName, taskId);
//                        }
//                        if (StringUtils.isNotNull(ajaxResult) && ajaxResult.isError()){
//                            synchData.setStatus("1");//同步失败
//                            synchData.setRemark(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                            sysSynchDataService.updateSysSynchData(synchData);
//                            SysBatch sysBatch = sysBatchService.selectSysBatchByTaskId(taskId);
//                            if (sysBatch != null) {
//                                sysBatch.setStatus("1");
//                                sysBatch.setRemake(ajaxResult.get(AjaxResult.MSG_TAG).toString());
//                                sysBatch.setEndTime(new Date());
//                                sysBatchService.updateSysBatch(sysBatch);
//                            }
//                        }
//                        count++;
////                    }
//                    }
//
//                    System.out.println("文件上传个数count : "+count);
//                    int progress = (int) ((count / (double) totalFileSizes) * 100);
//                    System.out.println("计算进度 progress:"+progress);
//                    uploadProgressMap.put(taskId, progress);
//                }
//            }
//        }
//        return count;
//    }
//
//}
